<?php
//多进程编程
$pid = pcntl_fork();

if ($pid) {
    //父进程
    echo "This is parent process\n";
    pcntl_waitpid($pid, $status);
} elseif ($pid == 0) {
    //子进程
    echo "This is child process\n";
} else {
    die("fork failed\n");
}

/* 
 * 
 *  pcntl_fork

函数原型: int pcntl_fork ( void )

执行该函数，会复制当前进程产生另一个进程，称之为当前进程的子进程，该函数在父进程和子进程的返回值不相同，在父进程中返回的是fork出的子进程的进程ID，而在子进程中返回值为0。

要注意的是在复制进程时，会复制该进程的数据（堆数据、栈数据和静态数据），包括在父进程打开的文件描述符，在子进程中也是打开的，这意味着当你在父进程使用了大量内存时，fork出来的子进程必须拥有等量的内存资源，否则可能会导致fork失败.

还有的同学也许会注意到，父进程还调用了一个函数pcntl_waitpid，这个函数的作用是什么呢？

pcntl_waitpid

函数原型: int pcntl_waitpid ( int $pid , int &$status [, int $options = 0 ] )

pid: 进程ID
status: 子进程的退出状态
option: 取决于操作系统是否提供wait3函数，如果提供该函数，则该选项参数才生效

来源: 实验楼

链接: https://www.shiyanlou.com/courses/987

本课程内容，由作者授权实验楼发布，未经允许，禁止转载、下载及非法传播
 *  */